<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button>按钮</button>
    <script>

        // 1.普通函数
        function fn() {
            console.log('普通函数的this' + this);//指向调用者window
        }
        window.fn()
        // fn.call()

        // 2.对象方法
        var o = {
            sing: function () {
                console.log('对象方法的this' + this);//指向调用对象o

            }
        }
        o.sing()

        // 3.构造函数
        function Star() {
            console.log('构造函数的this' + this);//指向实例化对象 原型对象里的this 指向的也是实例化的对象 ldh
            Star.prototype.sing = function () {
                console.log('构造函数原型的this' + this)
            }

        }
        var ldh = new Star()

        // 4.绑定事件函数
        var btn = document.querySelector('button')
        btn.addEventListener('click', function () {
            console.log('绑定事件的this' + this);//指向事件的调用者 btn

        })//点击了按钮调用

        // 5.定时器函数
        window.setInterval(function () {
            console.log('定时器的this' + this);//指向调用者window

        }, 2000);//定时器自动2秒钟调用一次


        // 6立即执行函数 一定要加分号隔开其他函数包括普通函数
        (function () {
            console.log('立即执行的this' + this);// 指向调用者window
        })();
        //自动调用
    </script>
</body>

</html>